package com.tj.bo.account.client;

import com.tj.bo.account.client.vo.*;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 充值服务
 * User: anonymous
 * Date: 2020/06/11
 * Time: 下午2:16
 */
public interface DepositService {

    /**
     * 获取充值通道列表
     */
    List<DepositChannelVO> getDepositChannelList(String userCode, boolean userInstaMojoPay);

    /**
     * 获取充值通道
     */
    DepositChannelVO getDepositChannel(int channelCode, boolean userInstaMojoPay);

    /**
     * 充值
     */
    Object deposit(DepositVO depositVO);


    /**
     * 充值回调 返回userCode
     */
    DepositNotifyResultVO depositNotify(DepositNotifyVO depositNotifyVO);

    /**
     * 获取最新一笔充值订单
     */
    DepositVO queryLatestDepositOrder(String userCode);

    /**
     * 获取充值记录
     */
    List<DepositVO> getDepositRecordList(String userCode);

    /**
     * 根据userCode获取充值成功记录数
     * @param userCode
     * @return
     */
    int getDepositRecordListByUserCode(String userCode);

    /**
     * 获取用户总充值金额
     * @param userCode
     * @return
     */
    UserDepositVO getUserDeposit(String userCode);

    /**
     * 获取订单No
     * @param orderNo
     * @return
     */
    UserDepositVO getUserDepositByOrderNo(String orderNo);

    /**
     * 是否有充值成功记录
     * @param userCode
     * @return
     */
    boolean hasDepositSuccessRecord(String userCode);

    /**
     * 是否需要认证
     * @param userCode
     * @return
     */
    boolean needAuthentication(String userCode);

    /**
     * 根据订单状态和时间查询充值列表
     * @param orderStatus
     * @param endTime
     * @return
     */
    List<DepositVO> selectsDepositOrderListByStatusAndTime(Integer orderStatus, Date endTime);

    /**
     * 更新充值状态
     * @param orderNo
     * @param status
     */
    void updateDepositStatus(String orderNo, Integer status);

    /**
     * 获取提现总金额
     * @param userCode
     * @return
     */
    BigDecimal selectTotalDepositAmount(String userCode);

}